const { Sequelize, Model } = require('sequelize');
const { dbName, host, port, user, password } = require('./config').database;
const sequelize = new Sequelize(dbName, user, password, {
    dialect: 'mysql',//标识是哪种数据库
    host,
    port,
    logging: true,//是否开启日志
    timezone: '+08:00',//
    define: {
        // create_time && update_time
        timestamps: false,
        // delete_time
        paranoid: true,
        //createdAt: 'created_at',
        //updatedAt: 'updated_at',
        //deletedAt: 'deleted_at' 
        // 把驼峰命名转换为下划线
        underscored: true,
        //作用域规则 可以包括与常规查找器 where, include, limit 等所有相同的属性
        scopes: {}
    }
}
)



//模型名称跟表名关联,init里面的属性跟字段关联
class Admin extends Model { }
Admin.init({
    // attributes
    adminId: {
        type: Sequelize.INTEGER,
        allowNull: false,
        primaryKey: true,
        autoIncrement: true,
    },
    name: {
        type: Sequelize.STRING
        // allowNull defaults to true
    },
    className: {
        type: Sequelize.STRING
    },
    score: {
        type: Sequelize.FLOAT
    }
}, {
    sequelize,//这个模型要关联哪个对象
    modelName: 'admin',
    tableName: 'admin',//这个模型要跟哪个表关联,默认有个规律就是模型的名称小写加s admins
    freezeTableName: true, // 不要将表名变成复数
    // options
});

// ### 作业：创建一个学生表,里面有班级字段,里面最好有自己班上同学姓名,其它班级的姓名随机写,有个字段存储游戏的分值,先实现随机的数值写入,查询出各班级前三名的学生



//新增数据

// for(var i=0;i<10;i++){
//     var score=Math.ceil(Math.random()*100);
// var className=Math.ceil(Math.random()*10)
//     Admin.create({ name: '帅哥李瑞y'+score,className:'软件技术'+className+'班',score:score}).then(() => {
//         console.log("创建成功")
//     });
// }



async function getAll() {
    await Admin.sync();//创建表,如果不存在

    console.log("用户模型表刚刚(重新)创建！");
          
}

getAll();
var htmls;
async function findData(page){
    
    var html = "<html><body><table style='border: 1px solid;'><tr><td>姓名</td><td>班级</td><td>成绩</td></tr>";
    
    var pageSize = 5;
   
    let user = await Admin.findAll({

        order: [


            ['score', 'DESC'],
            
        ],
        offset: (page-1)*pageSize, limit: pageSize,
        
    })

    for (let i = 0; i < user.length; i++) {
        html += "<tr><td>" + user[i].name + "</td><td>" + user[i].className + "</td><td>" + user[i].score + "</td></tr>"
      
    }
   
    html += '</table></body></html>';
    console.log(html);
    htmls=html.toString();
}

   
 
        
      
    



// ## 作业：利用express 想想怎么结合数据库,去实现学生玩（贪吃蛇的排名列表）,能把学生的分数，班级
// ##        在班上排名显示出来,还能实现分页

const express = require("express");

const app = express();

app.get("/db",(req, res) => {

    res.writeHead(200, { 'Content-Type': 'text/html;charset=utf-8' });
    console.log(req.url);
    let query = req.query;

        findData(Number(query.page))

     res.end(htmls);




})
// 监听3000端口
app.listen(8080);
